package pl.poznan.put.cs.idss.viamdp.core.structures;

/**
 * Interfejs wymuszający implementację metod specjalizujących pola.
 * 
 * @author Kornel Lewandowski
 * 
 */
public interface IField extends IAbstractField {

	/**
	 * Oblicza i zwraca nagrodę dla pola w bieżącej iteracji.
	 * 
	 * @return
	 */
	double calculateCurrentReward();

	/**
	 * Ustawia wartość nagrody w bieżącej iteracji.
	 * 
	 * @param reward
	 *            - wartość nagrody
	 */
	void setRewardValue(double reward);

	/**
	 * Zwraca wartość nagrody dla danego pola w zadanej iteracji.
	 * 
	 * @param iteration
	 *            - numer iteracji, z której pobierana jest wartość
	 * 
	 * @return
	 */
	double getReward(long iteration);

	/**
	 * Zwraca wartość ostantiej wyliczonej dla pola nagrody.
	 * 
	 * @return
	 */
	double getLastReward();

	/**
	 * Sprawdza, czy ostatnie dwie wartości w historii nagród są takie same
	 * (różne o najwyżej zadany próg).
	 * 
	 * @return - wartość logiczna
	 */
	boolean checkIfRewardChange();

}
